pyqt主线程给子线程传递参数的方法 您所在的位置:网站首页 python 新建窗口 传参 pyqt主线程给子线程传递参数的方法

pyqt主线程给子线程传递参数的方法

2023-09-04 09:05| 来源: 网络整理| 查看: 265

由于自己做的pyqt界面经常出现假死,本人实在不堪其扰,所以想学一下多线程。 话不多说,直接进入正题。 我们都知道子线程给ui主线程传递参数可以通过pyqtsignal方式来传递,但是主线程给子线程传递参数却很少人用

#方法一:全局变量法 import cv2 from PyQt5 import QtCore, QtWidgets from PyQt5.QtCore import QThread, pyqtSignal, QDateTime from PyQt5.QtWidgets import QApplication, QDialog, QLineEdit, QMainWindow import time import sys from PyQt5.uic import loadUi global singal#这就是全局变量,在主函数中修改其值,然后在子函数中获取其值,那么相当于传递参数了 #方法二:子线程类中的定义一个成员变量,这样的方法肯定比第一个好许多,有效防止变量被其他线程篡改 class BackendThread(QThread): # 通过类成员对象定义信号对象 update_date = pyqtSignal(str,int) path=None # 处理要做的业务逻辑 def setPath(self,path):#专门定义一个方法将主线程的参数传给子线程 self.path=path def run(self): while True: data = QDateTime.currentDateTime() currTime = data.toString("yyyy-MM-dd hh:mm:ss") self.update_date.emit(str(currTime),5) time.sleep(1) #print(self.path) 这是一个时钟线程类,我们需要将ui进程的path值传入此类中的path值,从而根据path的不同,执行不同的方法 class MainWindow(QMainWindow): def __init__(self): super().__init__() loadUi('TimeShow.ui', self) self.initUI() def initUI(self): # 创建线程 self.backend = BackendThread() #self.backend.setPath("") # 连接信号 self.backend.update_date.connect(self.handleDisplay) self.backend.path="./test.jpg"#也可以将子线程中的成员变量直接赋值 self.backend.setPath("./test.jpg")#通过成员变量的方法赋值 # 开始线程 self.backend.start() def handleDisplay(self, data,number):#参数位置和signal位置一样,信号内的变量自动给到函数,相对位置也不变 self.label.setText(data) #print(number) self.backend.path="./test.jpg"#也可以将子线程中的成员变量直接赋值 self.backend.setPath("./test.jpg")#通过成员变量的方法赋值

以上两行就是赋值的方法



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有